package org.csource.fastdfs;

import java.io.IOException;
import java.io.OutputStream;

import org.csource.fastdfs.DownloadCallback;

/**
* Download file by stream (download callback class)
* @author  zhouzezhong , Happy Fish,  YuQing
* @version Version 1.11
*/
public class DownloadStream implements DownloadCallback {
    private OutputStream out;
    private long currentBytes = 0;

    public DownloadStream(OutputStream out) {
        super();
        this.out = out;
    }

    /**
    * recv file content callback function, may be called more than once when the file downloaded
    * @param fileSize file size
    *	@param data data buff
    * @param bytes data bytes
    * @return 0 success, return none zero(errno) if fail
    */
    public int recv(long fileSize, byte[] data, int bytes) {
        try {
            out.write(data, 0, bytes);
        } catch (IOException ex) {
            ex.printStackTrace();
            return -1;
        }

        currentBytes += bytes;
        if (this.currentBytes == fileSize) {
            this.currentBytes = 0;
        }

        return 0;
    }
}
